package com.ittao.taoaicodemodel.model.vo.vip;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;

import java.io.Serializable;
import java.time.LocalDateTime;

/**
 * 脱敏后的VIP兑换码信息
 *
 * @author <a href="https://gitee.com/it-heima-ht">程序员 Tao</a>
 */
@Data
public class VipRedeemCodeVO implements Serializable {

    /**
     * id
     */
    private Long id;

    /**
     * 兑换码
     */
    private String code;

    /**
     * 状态：unused-未使用，used-已使用，expired-已过期
     */
    private String status;

    /**
     * 状态描述
     */
    private String statusText;

    /**
     * 兑换码使用有效期
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime validUntil;

    /**
     * 使用时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime usedAt;

    /**
     * 使用用户
     */
    private String usedBy;

    /**
     * 使用用户ID
     */
    private Long usedByUserId;

    /**
     * VIP时长（天）
     */
    private Integer vipDuration;

    /**
     * VIP时长描述（如：7天、30天、365天）
     */
    private String vipDurationText;

    /**
     * VIP实际过期时间（只有被使用的VIP才有）
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime vipExpireTime;

    /**
     * VIP剩余天数（只有被使用且未过期的VIP才有）
     */
    private Integer vipRemainingDays;

    /**
     * VIP剩余时间描述
     */
    private String vipRemainingText;

    /**
     * 是否VIP已过期
     */
    private Boolean isVipExpired;

    /**
     * VIP编号
     */
    private Long vipNumber;

    /**
     * 备注信息
     */
    private String remark;

    /**
     * 创建时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime createTime;

    /**
     * 更新时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime updateTime;

    /**
     * 兑换码是否可用（综合判断兑换码有效期和状态）
     */
    private Boolean isAvailable;

    /**
     * 兑换码剩余可用天数
     */
    private Integer codeRemainingDays;

    private static final long serialVersionUID = 1L;
}
